home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 November: Tool Chest / Dev.CD Nov 98 TC.toast / What's New? / Development Kits / USBDDK_v1.0.1_updated / Examples / USBSampleStorageDriver / SampleStorageDriverAPI.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-09-29  |  4.3 KB  |  148 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        StorageClassDriverAPI.h
  3.  
  4.     Contains:    xxx put contents here xxx
  5.  
  6.     Version:    xxx put version here xxx
  7.  
  8.     Copyright:    © 1998 by Apple Computer, Inc., all rights reserved.
  9.  
  10. */
  11.  
  12. #ifndef __STORAGEDRIVERAPI__
  13. #define __STORAGEDRIVERAPI__
  14.  
  15. #include <usb.h>
  16.  
  17. #define kDispatchTableVersion        0
  18. #define kRequestPending                1
  19.  
  20. // Return codes from the class driver
  21. #define kCommandBusyError            -10000
  22.  
  23. enum ControlSelectors
  24. {
  25.     kControlDisableRemoval =    0,
  26.     kControlEnableRemoval
  27. };
  28.  
  29. enum StatusSelectors
  30. {
  31.     kStatusConfiguration =        0,
  32.     kStatusDeviceStatus,
  33.     kStatusRemovalStatus
  34. };
  35.  
  36. enum driverConfigurationStatus
  37. {
  38.     kNotConfigured =            0,
  39.     kConfigureInProgress,
  40.     kConfigureComplete,
  41.     kConfigureFailed
  42. };
  43.  
  44.  
  45. #define kCDBSize                    12        // Per the USB Mass Storage Class spec.
  46.  
  47. // RBC Device command operation codes
  48. enum {
  49.     kReadBlocks =        0x28,
  50.     kReadCapacity =        0x25,
  51.     kStartStopUnit =    0x1b,
  52.     kSynchronizeCache =    0x35,
  53.     kWriteBlocks =        0x2a,
  54.     kVerifyBlocks =        0x2f
  55. };
  56.  
  57. //typedef CALLBACK_API_C( OSStatus , StorageBlockRWProcPtr )(void* storageBlockRWPBPtr );
  58. typedef CALLBACK_API_C( OSStatus , StorageExecuteCommandProcPtr )(void* storageExecuteCommandPBPtr );
  59. typedef CALLBACK_API_C( void , StorageClassCompletionProcPtr )(void* storageClassPBPtr );
  60.  
  61.  
  62. struct StorageStatusPB {
  63.     StorageClassCompletionProcPtr    completionProc;        // -> Completion routine
  64.     UInt8                            deviceStatus[2];            // <- Two bytes of status
  65.     OSStatus                        status;                // <- Result of operation
  66. };
  67. typedef struct StorageStatusPB    StorageStatusPB;
  68. typedef StorageStatusPB *        StorageStatusPBPtr;
  69.  
  70.  
  71. struct StorageControlPB {
  72.     UInt32                            selector;            // -> Operation to perform
  73.     StorageClassCompletionProcPtr    completionProc;        // -> Completion routine
  74.     OSStatus                        status;                // <- Result of operation
  75. };
  76. typedef struct StorageControlPB    StorageControlPB;
  77. typedef StorageControlPB *        StorageControlPBPtr;
  78.  
  79.  
  80. struct StorageBlockRWPB {
  81.     UInt32                            startBlock;            // -> Starting logical block number
  82.     UInt32                            blockCount;            // -> Number of logical blocks to R/W
  83.     Ptr                                userBuffer;            // -> Pointer to user buffer
  84.     UInt32                            expectedCount;        // -> Expected number of bytes to transfer
  85.     StorageClassCompletionProcPtr    completionProc;        // -> Completion routine
  86.     UInt32                            actualCount;        // <- Actual number of bytes transferred
  87.     OSStatus                        status;                // <- Result of operation
  88. };
  89. typedef struct StorageBlockRWPB    StorageBlockRWPB;
  90. typedef StorageBlockRWPB *        StorageBlockRWPBPtr;
  91.  
  92.  
  93. struct StorageExecuteCommandPB {
  94.     UInt8                            cdb[kCDBSize];        // -> CDB to send to device
  95.     UInt32                            flags;                // -> Data transfer flags (See below)
  96.     Ptr                                userBuffer;            // -> Pointer to user buffer
  97.     UInt32                            expectedCount;        // -> Expected number of bytes to transfer
  98.     StorageClassCompletionProcPtr    completionProc;        // -> Completion routine
  99.     UInt32                            actualCount;        // <- Actual number of bytes transferred
  100.     OSStatus                        status;                // <- Result of operation
  101. };
  102. typedef struct StorageExecuteCommandPB    StorageExecuteCommandPB;
  103. typedef StorageExecuteCommandPB *        StorageExecuteCommandPBPtr;
  104.  
  105. // Data transfer flags for StorageExecuteCommandPB
  106. enum {
  107.     kStorageDataIn    =    0x0001,
  108.     kStorageDataOut =    0x0002,
  109.     kStorageNoData =    0x0004
  110. };
  111.  
  112. typedef CALLBACK_API_C( OSStatus , StorageInitializeProcPtr )(void);
  113.  
  114. typedef CALLBACK_API_C( OSStatus , StorageControlProcPtr )(UInt32 theControlSelector, void *theControlData);
  115.  
  116. typedef CALLBACK_API_C( OSStatus , StorageStatusProcPtr )(UInt32 theInfoSelector, void *theInfo);
  117.  
  118.  
  119. struct StorageClassDispatchTable {
  120.     UInt32                            dispatchTableVersion;
  121.     StorageInitializeProcPtr         pStorageInitialize;
  122.     StorageControlProcPtr             pStorageControl;
  123.     StorageStatusProcPtr             pStorageStatus;
  124.     StorageExecuteCommandProcPtr    pStorageExecuteCmd;
  125. };
  126. typedef struct StorageClassDispatchTable    StorageClassDispatchTable;
  127. typedef StorageClassDispatchTable *            StorageClassDispatchTablePtr;
  128.  
  129.  
  130. EXTERN_API_C( OSStatus )
  131. StorageInitialize            (void);
  132.  
  133. EXTERN_API_C( OSStatus )
  134. StorageControl                (UInt32 theControlSelector, void *theControlData);
  135.  
  136. EXTERN_API_C( OSStatus )
  137. StorageStatus                (UInt32 theInfoSelector, void *theInfo);
  138.  
  139. EXTERN_API_C( OSStatus )
  140. StorageBlockRead            (StorageBlockRWPBPtr storageBlockRWPBPtr );
  141.  
  142. EXTERN_API_C( OSStatus )
  143. StorageBlockWrite            (StorageBlockRWPBPtr storageBlockRWPBPtr );
  144.  
  145. EXTERN_API_C( OSStatus )
  146. StorageExecuteCommand        (StorageExecuteCommandPBPtr storageExecuteCommandPBPtr );
  147.  
  148. #endif